package com.celan.year2023.month05.day01;

/**
 * @author Celan
 * @ClassName Solution03
 * @description: TODO
 * @date 2023/05/01
 * @version: 1.0
 */
public class Solution03 {
    public int rangeBitwiseAnd(int left, int right) {
        //对所有数字执行按位与运算的结果是所有对应二进制字符串的公共前缀再用零补上后面的剩余位
        //=> 给定两个整数，找到它们对应的二进制字符串的公共前缀
        int shift = 0;
        // 找到公共前缀、
        //将两个数一起右移,直到left == right,剩余的值即为公共前缀
        while (left < right) {
            left >>= 1;
            right >>= 1;
            ++shift;
        }
        //此时将后续的位全部补0
        return left << shift;
    }
}
